home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / hd_installers / -whdload- / whdload_dev / src / slave-examples / turrican.asm < prev    next >
Assembly Source File  |  1998-07-16  |  15KB  |  706 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    turrican.asm
  3. ;  :Contents.    Slave for "Turrican"
  4. ;        supports orginal "Rainbow Arts", "Innerprise" and
  5. ;        "AmigaFun" rerelease
  6. ;  :Author.    Wepl
  7. ;  :Version.    $Id: turrican.asm 1.2 1998/06/27 23:50:34 jah Exp jah $
  8. ;  :History.    31.03.97 initial
  9. ;        22.04.97 new 60000 and bb -> changes
  10. ;        28.04.97 copper preserved (install-waitpic)
  11. ;        05.05.97 rework files instead image, lots more
  12. ;        13.05.97 file "30" forgotten, delay on intro voice added
  13. ;        24.05.97 highscore saving fixed
  14. ;        25.05.97 cache enabled
  15. ;             to version 4 evaluated (kinit removed)
  16. ;        27.05.97 blitter patches
  17. ;        24.06.97 keyboard routine fixed
  18. ;        22.07.97 copylock level 1,2,4,5 removed
  19. ;        24.07.97 voice wait improved
  20. ;             blitter waits reworked and completed
  21. ;        29.07.97 random generator replaced because Access Fault's
  22. ;        31.07.97 support for second version started
  23. ;        01.08.97 extro fixed
  24. ;        09.08.97 keyboard stuff in install changed
  25. ;             support for innerprise version completed
  26. ;             blitwaits on endboss added
  27. ;        15.08.97 sp changed for install because crash with v2
  28. ;        17.08.97 basememsize for install increased from 7f000 -> 82000
  29. ;        20.08.97 level4 protection adapted for innerprise version
  30. ;        30.08.97 keyboard external
  31. ;        15.09.97 support for "AmigaFun" rerelease
  32. ;        27.06.98 cleanup for source code release
  33. ;  :Requires.    -
  34. ;  :Copyright.    Public Domain
  35. ;  :Language.    68000 Assembler
  36. ;  :Translator.    Barfly V1.131
  37. ;  :To Do.
  38. ;---------------------------------------------------------------------------*
  39.  
  40. ;install        ;if this label is set the install Slave will be created
  41.  
  42.     INCDIR    Includes:
  43.     INCLUDE    whdload.i
  44.  
  45.     IFD    BARFLY
  46.     IFND install
  47.     OUTPUT    wart:turrican/turrican.slave
  48.     ELSE
  49.     OUTPUT    wart:turrican/install.slave
  50.     ENDC
  51.     BOPT    O+ OG+                ;enable optimizing
  52.     BOPT    ODd- ODe-            ;disable mul optimizing
  53.     BOPT    w4-                ;disable 64k warnings
  54.     SUPER                    ;disable supervisor warnings
  55.     ENDC
  56.  
  57. ;======================================================================
  58.  
  59. .base        SLAVE_HEADER        ;ws_Security + ws_ID
  60.         dc.w    4        ;ws_Version
  61.         dc.w    WHDLF_NoError    ;ws_Flags
  62.         dc.l    $82000        ;ws_BaseMemSize
  63.         dc.l    $100        ;ws_ExecInstall
  64.         dc.w    _Start-.base    ;ws_GameLoader
  65.         dc.w    _dir-.base    ;ws_CurrentDir
  66.         dc.w    0        ;ws_DontCache
  67. _keydebug    dc.b    0        ;ws_keydebug
  68.     IFD install
  69. _keyexit    dc.b    $45        ;ws_keyexit = ESC
  70.     ELSE
  71. _keyexit    dc.b    $59        ;ws_keyexit = F10
  72.     ENDC
  73. _dir        dc.b    "data",0
  74.  
  75. ;======================================================================
  76.  
  77.     IFD    BARFLY
  78.     IFND    install
  79.         dc.b    "$VER: Turrican.Slave by Wepl "
  80.     ELSE
  81.         dc.b    "$VER: Turrican Install.Slave by Wepl "
  82.     ENDC
  83.     DOSCMD    "WDate >T:date"
  84.     INCBIN    "T:date"
  85.         dc.b    0
  86.     ENDC
  87.     EVEN
  88.  
  89. ;======================================================================
  90. _Start    ;    A0 = resident loader
  91. ;======================================================================
  92.  
  93.         lea    (_resload,pc),a1
  94.         move.l    a0,(a1)
  95.         
  96. ;======================================================================
  97.  
  98.     IFD install
  99.         
  100. ;======================================================================
  101.  
  102.     ;install keyboard quitter
  103.         bsr    _SetupKeyboard
  104.  
  105.     ;magic screen
  106.         lea    _disk1,a0
  107.         lea    $50000,a1
  108.         bsr    _Picture
  109.             waitbutton
  110.         lea    _wait,a0
  111.         lea    $50000,a1
  112.         bsr    _Picture
  113.  
  114.     ;load the loader
  115.         MOVE.L    #$00060000,a0        ;adr
  116.         MOVE.L    #$00017e00,d1        ;size
  117.         MOVE.L    #$00000400,d0        ;offset
  118.         sub.l    a1,a1            ;taglist
  119.         movem.l    d1/a0,-(a7)
  120.         move.l    (_resload),a3
  121.         jsr    (resload_DiskLoadDev,a3)
  122.     ;save the loader
  123.         movem.l    (a7),d0/a1
  124.         lea    (_60000),a0
  125.         jsr    (resload_SaveFile,a3)
  126.     ;    jsr    (resload_LoadFile,a3)
  127.     ;check version
  128.         movem.l    (a7)+,d0/a0
  129.         jsr    (resload_CRC16,a3)
  130.         cmp.w    #$5346,d0
  131.         beq    _version_1
  132.         cmp.w    #$59fe,d0
  133.         beq    _version_2
  134.         bra    _badver
  135.         
  136. _version_1    skip    $17a-$16e,$6016e    ;preserve copperlist
  137.         JSR    $0006010C.L        ;A6 = _custom !!!
  138.         move.w    #INTF_SETCLR|INTF_INTEN|INTF_PORTS,(intena,a6)
  139.  
  140.     ;load all files from disk and save them
  141.                         ;A6 = $dff000
  142.         lea    (.files),a4        ;A4 file table
  143.         move.l    #$1000,a5        ;A5 address
  144.  
  145. .loop        movem.l    (a4),d0/d1        ;starttrack + size
  146.         move.l    a5,d2            ;address
  147.         movem.l    d5-d7/a4-a5,-(a7)
  148.         jsr    $6057a            ;loader
  149.         movem.l    (a7)+,d5-d7/a4-a5
  150.         
  151.         movem.l    (a4)+,d0/d2
  152.         bsr    _LongToStr        ;a0 = name
  153.         move.l    d2,d0            ;size
  154.         move.l    a5,a1            ;address
  155.         move.l    (_resload),a2
  156.         jsr    (resload_SaveFile,a2)
  157.         
  158.         tst.l    (a4)
  159.         bne    .loop
  160.  
  161.     ;load and save the highscores
  162.         movem.l    (.files),d0/d1        ;starttrack + size
  163.         move.l    #$40000,d2        ;address
  164.         jsr    $6057a            ;loader
  165.         lea    $40000,a0        ;start
  166.         move.l    a0,a1
  167.         add.l    (.files+4),a1        ;end
  168.         lea    $100,a2            ;dest
  169.         jsr    $6078c            ;PP decrunch
  170.         jsr    $100+$8d0        ;load highs
  171.         bsr    _savehighs
  172.  
  173.     ;quit this magic stuff
  174.         bra    _exit
  175.  
  176.     ;table of files
  177. .files        dc.l    $12,$d4e4        ;main exe
  178.         dc.l    $1c,$11964
  179.         dc.l    $28,$c474
  180.         dc.l    $30,$1478
  181.         DC.L    $31,$20BC8
  182.         DC.L    $46,$22FA8
  183.         DC.L    $5C,$1EBC0
  184.         DC.L    $70,$2642C
  185.         DC.L    $89,$20914
  186.     ;    DC.L    $9E            ;end ?
  187.         dc.l    0
  188.  
  189. _version_2    skip    $15e-$152,$60152    ;preserve copperlist
  190.         JSR    $000600f0        ;A6 = _custom !!!
  191.         move.w    #INTF_SETCLR|INTF_INTEN|INTF_PORTS,(intena,a6)
  192.  
  193.     ;load all files from disk and save them
  194.                         ;A6 = $dff000
  195.         lea    (.files),a4        ;A4 file table
  196.         move.l    #$1000,a5        ;A5 address
  197.  
  198. .loop        movem.l    (a4),d0/d1        ;starttrack + size
  199.         move.l    a5,d2            ;address
  200.         movem.l    d5-d7/a4-a5,-(a7)
  201.         jsr    $6057a-$1c        ;loader
  202.         movem.l    (a7)+,d5-d7/a4-a5
  203.         
  204.         movem.l    (a4)+,d0/d2
  205.         bsr    _LongToStr        ;a0 = name
  206.         move.l    d2,d0            ;size
  207.         move.l    a5,a1            ;address
  208.         move.l    (_resload),a2
  209.         jsr    (resload_SaveFile,a2)
  210.         
  211.         tst.l    (a4)
  212.         bne    .loop
  213.  
  214.     ;load and save the highscores
  215.         movem.l    (.files),d0/d1        ;starttrack + size
  216.         move.l    #$40000,d2        ;address
  217.         jsr    $6057a-$1c        ;loader
  218.         lea    $40000,a0        ;start
  219.         move.l    a0,a1
  220.         add.l    (.files+4),a1        ;end
  221.         lea    $100,a2            ;dest
  222.         jsr    $6078c-$1c        ;PP decrunch
  223.         jsr    $100+$8d0        ;load highs
  224.         bsr    _savehighs
  225.  
  226.     ;quit this magic stuff
  227.         bra    _exit
  228.  
  229.     ;table of files
  230. .files        dc.l    $12,$d500        ;main exe
  231.         dc.l    $1c,$11964
  232.         dc.l    $28,$c4f4
  233.         dc.l    $30,$1478        ;loading tfmx
  234.         DC.L    $31,$20BC8        ;level 1
  235.         DC.L    $46,$22FA8        ;level 2
  236.         DC.L    $5C,$1EBC0        ;level 3
  237.         DC.L    $70,$26168        ;level 4
  238.         DC.L    $88,$20914        ;level 5
  239.         dc.l    0
  240.         
  241. ;--------------------------------
  242.  
  243. _disk1        INCBIN    pics/pic_disk1.bin
  244. _wait        INCBIN    pics/pic_waitesc.bin
  245. _colors        INCLUDE    pics/pic_colors.i
  246.         
  247. ;======================================================================
  248.  
  249.     INCLUDE    Sources:whdload/keyboard.s
  250.     INCLUDE    Sources:whdload/picture.s
  251.  
  252. ;======================================================================
  253.  
  254.     ELSE
  255.     
  256. ;======================================================================
  257.  
  258.         move.l    (_resload),a3            ;A3 = resload
  259.  
  260.     ;random area
  261.         lea    $80000,a7
  262.         bsr    _rnd_init
  263.         
  264.     ;check for AmigaFun Version
  265.         lea    _60000,a0
  266.         jsr    (resload_GetFileSize,a3)
  267.         tst.l    d0
  268.         bne    _v1_v2
  269.  
  270.     ;bootblock stuff
  271.         move.l    #$400,d0            ;offset
  272.         move.l    #$18000,d1            ;size
  273.         moveq    #1,d2                ;disk
  274.         lea    $5fe00,a0            ;data
  275.         lea    ($200,a0),a2            ;A2 = 60000
  276.         jsr    (resload_DiskLoad,a3)
  277.  
  278.         patch    $4fa(a2),_load_v3        ;with cache
  279.         patch    $57a(a2),_load_v3        ;plain
  280.         patch    $104(a2),_100_v3
  281.     ;the intro runs on 68030 but not on 68060 (bad compressor)
  282.         skip    6,$36(a2)            ;rainbow arts intro
  283.         jmp    ($8,a2)
  284.  
  285. _100_v3        lea    $603ae,a2            ;orginal
  286.         movem.l    d0-d1/a0-a1,-(a7)
  287.         lea    $100,a0
  288.         patch    $61c(a0),_load_v3        ;with cache
  289.         patch    $696(a0),_load_v3        ;plain
  290.         patch    $8d0(a0),_loadhighs
  291.         patch    $95a(a0),_savehighs
  292.         patchs    $3d0(a0),_p_v3
  293.  
  294.         move.l    a0,a1
  295.         add.l    #112256,a1            ;main size
  296.         bsr    _fb                ;fix bliter waits
  297.  
  298.         movem.l    (a7)+,d0-d1/a0-a1
  299.         jmp    $100
  300.  
  301. _p_v3        jsr    (a0)
  302.         move.l    a0,a2
  303.         bsr    _out
  304.         movem.l    (4,a7),d0-a6
  305.         move.l    (a7)+,a0
  306.         add.w    #15*4,a7
  307.         jmp    (a0)
  308.  
  309. ;--------------------------------
  310. ; d0 = starttrack
  311. ; d1 = size in bytes
  312. ; d2 = dest. address
  313.  
  314. _load_v3    mulu    #$1600,d0        ;offset
  315.         move.l    d2,a0            ;data
  316.         moveq    #1,d2            ;disk
  317.         move.l    (_resload),a2
  318.         jsr    (resload_DiskLoad,a2)
  319.         rts
  320.  
  321. ;--------------------------------
  322.  
  323.     ;enable caches
  324. _v1_v2        move.l    #CACRF_EnableI,d0
  325.         move.l    d0,d1
  326.         jsr    (resload_SetCACR,a3)
  327.  
  328.     ;bootblock stuff
  329.         lea    _60000,a0
  330.         lea    $60000,a1
  331.         move.l    a1,a2
  332.         jsr    (resload_LoadFileDecrunch,a3)
  333.         move.l    d0,d7            ;d7 = size IMPORTANT !!
  334.  
  335.     ;check version
  336.         move.l    a2,a0
  337.         jsr    (resload_CRC16,a3)
  338.         cmp.w    #$5346,d0
  339.         beq    _version_1
  340.         cmp.w    #$59fe,d0
  341.         beq    _version_2
  342.         bra    _badver
  343.         
  344. _version_1    patch    $4fa(a2),_load        ;with cache
  345.         patch    $57a(a2),_load        ;plain
  346.         patchs    $70(a2),_70
  347.         patchs    $b6(a2),_b6        ;to wait some time
  348.         patch    $104(a2),_100_v1
  349.         jmp    ($8,a2)
  350.  
  351. _version_2    patch    $4de(a2),_load        ;with cache
  352.         patch    $55e(a2),_load        ;plain
  353.         patchs    $54(a2),_70
  354.         patchs    $9a(a2),_9a        ;to wait some time
  355.         patch    $e8(a2),_100_v2
  356.         jmp    ($8,a2)
  357.  
  358.     ;get event
  359. _70        movem.l    d0/a0,-(a7)
  360.         lea    (_ec),a0
  361.         bsr    _getec
  362.         move.l    d0,(a0)
  363.         movem.l    (a7)+,d0/a0
  364.         move.w    #$30,($9a,a6)        ;orginal
  365.         rts
  366.  
  367. _ec        dc.l    0
  368.  
  369. _b6        move.l    d0,-(a7)
  370. .wait        bsr    _getec            ;wait for end of logo
  371.         sub.l    #170,d0
  372.         cmp.l    (_ec),d0
  373.         blo    .wait
  374.         move.l    (a7)+,d0
  375.         move.l    #$602d0,$6c        ;orginal
  376.         addq.l    #2,(a7)
  377.         rts
  378.  
  379. _9a        move.l    d0,-(a7)
  380. .wait        bsr    _getec            ;wait for end of logo
  381.         sub.l    #170,d0
  382.         cmp.l    (_ec),d0
  383.         blo    .wait
  384.         move.l    (a7)+,d0
  385.         move.l    #$602b4,$6c        ;orginal
  386.         addq.l    #2,(a7)
  387.         rts
  388.  
  389.     ;get event counter ciaa
  390. _getec        moveq    #0,d0
  391.         move.b    _ciaa+ciatodhi,d0
  392.         lsl.w    #8,d0
  393.         move.b    _ciaa+ciatodmid,d0
  394.         lsl.l    #8,d0
  395.         move.b    _ciaa+ciatodlow,d0
  396.         rts
  397.  
  398. _100_v1        lea    $603ae,a2        ;orginal
  399.         bra    _100_v1_v2
  400.  
  401. _100_v2        lea    $60392,a2        ;original
  402.  
  403. _100_v1_v2    movem.l    d0-d1/a0-a1,-(a7)
  404.  
  405.         lea    $100,a0
  406.         patch    $61c(a0),_load        ;with cache
  407.         patch    $696(a0),_load        ;plain
  408.         patch    $8d0(a0),_loadhighs
  409.         patch    $95a(a0),_savehighs
  410.         patchs    $af4(a0),_pp20
  411.     ;    patchs    $6fe8(a0),_train
  412.     ;    patch    $6f74(a0),_kb
  413.  
  414.         move.l    a0,a1
  415.         add.l    #112256,a1        ;main size
  416.         bsr    _fb            ;fix bliter waits
  417.  
  418.         movem.l    (a7)+,d0-d1/a0-a1
  419.         jmp    $100
  420.  
  421. ;--------------------------------
  422. ;  15d=ff level skip
  423. ; 7ac9      energy
  424. ; 7aaf    continues
  425.  
  426.     IFEQ 1
  427. _train        lea    $7118,a0        ;original
  428.         moveq    #2,d2            ;original
  429.         cmp.b    #$5f,d0
  430.         bne    .ret
  431.         st    $15d
  432. .ret        rts
  433.     ENDC
  434.     IFEQ 1
  435. _kb        bsr    _kinit
  436.         clr.b    $7128        ;orginal
  437.         clr.b    $216        ;orginal
  438.         rts            ;orginal
  439.     ENDC
  440.  
  441. ;--------------------------------
  442.  
  443. _pp20        subq.l    #4,a7
  444.         pea    (_out)
  445.         move.l    (8,a7),(4,a7)
  446.         move.l    (a7)+,(4,a7)
  447.         cmp.l    #"PP20",(a0)
  448.         rts
  449.  
  450.     ;after unpacking
  451. _out        cmp.l    #$00021c80,(a2)
  452.         beq    .level1
  453.         cmp.l    #$00020080,(a2)
  454.         beq    .level2
  455.         cmp.l    #$00023ee0,(a2)
  456.         beq    .level3
  457.         cmp.l    #$000219a0,(a2)
  458.         beq    .level4
  459.         cmp.l    #$00022000,(a2)
  460.         beq    .level5
  461.         cmp.l    #$6000000a,(a2)
  462.         beq    .file28
  463.         rts
  464.  
  465.     ;fix no exit after Level 1-3
  466. .level1        move.w    #$4e71,$1902(a2)    ;copylock
  467.         bra    .fb
  468.     ;fix deadlock on level 2
  469. .level2        move.w    #$4e75,$f08(a2)
  470.         bra    .fb
  471. .level4        cmp.w    #$6708,$3a58(a2)
  472.         bne    .fb
  473.         move.b    #$60,$3a58(a2)        ;beq -> bra  v1 (rainbow arts)
  474.         move.b    #$60,$4722(a2)        ;beq -> bra  v1 (rainbow arts)
  475.         bra    .fb
  476. .level5        move.b    #$60,$37e2(a2)        ;beq -> bra
  477.         move.b    #$60,$3a54(a2)        ;beq -> bra ('FUCK YOU')
  478.         move.b    #$60,$471e(a2)        ;beq -> bra ('FUCK YOU')
  479.         patchs    $3468(a2),.4_a0        ;blitter
  480.         patchs    $43e4(a2),.6_a0        ;blitter
  481. .level3
  482. .fb        movem.l    d0-d1/a0-a1,-(a7)
  483.         move.l    a2,a0            ;A0 = start
  484.         move.l    a2,a1
  485.         add.l    #259840,a1        ;A1 = end (level size)
  486.         bsr    _fb
  487.         movem.l    (a7)+,d0-d1/a0-a1
  488.         tst.l    d0            ;restore flags
  489.         rts
  490.  
  491. .file28        movem.l    d0-d1/a0-a1,-(a7)
  492.         move.l    a2,a0            ;A0 = start
  493.         move.l    a2,a1
  494.         add.l    #50292,a1        ;A1 = end (level size)
  495.         bsr    _fb
  496.         movem.l    (a7)+,d0-d1/a0-a1
  497.         tst.l    d0            ;restore flags
  498.         rts
  499.  
  500.     ;special blit stuff
  501. .4_a0        move.w    (4,a0),($58,a6)
  502.         bra    .wait
  503. .6_a0        move.w    (6,a0),($58,a6)
  504. .wait        BLITWAIT a6
  505.         rts
  506.  
  507.     ;fix area for blitter and rnd
  508. _fb        movem.l    a0-a2,-(a7)
  509.         lea    ($d0),a2        ;patch routine
  510.         bsr    _blitfix_imm_58a6
  511.         movem.l    (a7),a0-a2
  512.         lea    ($10),a2        ;patch routine
  513.         bsr    _blitfix_dn_58a6
  514.         movem.l    (a7)+,a0-a2
  515.         bra    _fix_rnd
  516.  
  517. ;PATCHCOUNT
  518.  
  519. ;--------------------------------
  520. ; fix bad random generator:
  521. ; and a lot variations of this
  522. ;    2078 01dc        move.l    ($1dc).w,a0
  523. ;    3010            move.w    (a0),dx
  524. ;    54b8 01dc        addq.l    #2,($1dc).w
  525. ;    b1fc 00ff ffde        cmpa.l    #$ffffde,a0
  526. ;    6d08            blt.b    ...
  527. ;    21fc 00fc 00d2 01dc    move.l    #$fc00d2,($1dc).w
  528.  
  529. RND_START = $80000
  530. RND_STOP  = $82000
  531.  
  532. _rnd_init    lea    (RND_START),a0
  533.         lea    (RND_STOP),a1
  534. .fill        bsr    _Random
  535.         move.w    d0,(a0)+
  536.         cmp.l    a0,a1
  537.         bne    .fill
  538.         rts
  539.  
  540. _fix_rnd    move.l    #RND_START+$d2,($1dc)
  541. .loop        cmp.l    #$21fc00fc,(a0)
  542.         bne    .next
  543.         cmp.l    #$00d201dc,(4,a0)
  544.         bne    .next
  545.  
  546.         move.l    #RND_START+$d2,(2,a0)
  547.         move.l    #RND_STOP-$22,(-6,a0)
  548.  
  549. .next        addq.l    #2,a0
  550.         cmp.l    a0,a1
  551.         bhs    .loop
  552.         rts
  553.  
  554.     IFEQ 1
  555. .loop        cmp.l    #$207801dc,(a0)
  556.         bne    .next
  557.         cmp.w    #$54b8,(6,a0)
  558.         bne    .next
  559.         cmp.l    #$01dcb1fc,(8,a0)
  560.         bne    .next
  561.  
  562.         move.w    (4,a0),d0        ;d0 = MOVE.W (A0),Dx
  563.         and.w    #%0000111000000000,d0
  564.         beq    .1
  565.         or.w    #%1100000101000000,d0    ;EXG Dx,D0
  566.         move.w    d0,(a0)+
  567. .1        move.w    #$4eb9,(a0)+        ;JSR $xxxxxxxx.l
  568.         pea    _Random
  569.         move.l    (a7)+,(a0)+
  570.         tst.w    d0
  571.         beq    .2
  572.         move.w    d0,(a0)+
  573. .2        move.w    #$60<<8+18,(a0)+    ;BRA.B
  574.         tst.w    d0
  575.         beq    .next
  576.         subq.w    #4,(-2,a0)        ;correct because 2x EXG
  577.  
  578. .next        addq.l    #2,a0
  579.         cmp.l    a0,a1
  580.         bhs    .loop
  581.         rts
  582.     ENDC
  583.  
  584. ;--------------------------------
  585. ; random function
  586. ; IN:    -
  587. ; OUT:    D0 = UWORD random value
  588.  
  589. _Random        move.l    a0,-(a7)
  590.         lea    (.rand),a0
  591.         move.w    (vhposr+_custom),d0
  592.         add.w    (a0),d0
  593.         ror.w    #1,d0
  594.         move.w    d0,(a0)
  595.         move.l    (a7)+,a0
  596.         rts
  597.  
  598. .rand        dc.w    $3f2b
  599.  
  600. ;--------------------------------
  601. ; d0 = starttrack
  602. ; d1 = size in bytes
  603. ; d2 = dest. address
  604. ; $1978 = 6520 bytes per track
  605.  
  606. _load        movem.l    d0-d1/a0-a2,-(a7)
  607.         bsr    _LongToStr
  608.         move.l    d2,a1
  609.         move.l    (_resload),a2
  610.         jsr    (resload_LoadFileDecrunch,a2)
  611.         movem.l    (a7)+,d0-d1/a0-a2
  612.         rts
  613.  
  614. ;--------------------------------
  615.  
  616. _loadhighs    movem.l    d0-d1/a0-a2,-(a7)
  617.         move.l    (_resload),a2        ;A2 = resload
  618.         lea    _highsname,a0
  619.         jsr    (resload_GetFileSize,a2)
  620.         tst.l    d0
  621.         beq    .end
  622.         lea    _highsname,a0
  623.         lea    $2d6,a1
  624.         jsr    (resload_LoadFileDecrunch,a2)
  625.         bsr    _crypt
  626. .end        movem.l    (a7)+,d0-d1/a0-a2
  627.         rts
  628.  
  629. ;======================================================================
  630.  
  631.     INCLUDE    Sources:whdload/blitfix_dn_58a6.s
  632.     INCLUDE    Sources:whdload/blitfix_imm_58a6.s
  633.  
  634. ;======================================================================
  635.  
  636.     ENDC
  637.     
  638. ;======================================================================
  639.  
  640. _savehighs    movem.l    d0-d2/a0-a3,-(a7)
  641.         lea    _custom,a3
  642.         move.w    (dmaconr,a3),d2
  643.         move.w    #$7fff,(dmacon,a3)
  644.         bsr    _crypt
  645.         move.l    #$61*4,d0
  646.         lea    _highsname,a0
  647.         lea    $2d6,a1
  648.         move.l    (_resload),a2
  649.         jsr    (resload_SaveFile,a2)
  650.         bsr    _crypt
  651.         or.w    #$8000,d2
  652.         move.w    d2,(dmacon,a3)
  653.         movem.l    (a7)+,d0-d2/a0-a3
  654.         rts
  655.  
  656. ;----------------------------------------
  657.  
  658. _crypt        move    sr,d1
  659.         or    #$700,sr
  660.         lea    $2d6,a0
  661.         move.w    #$61*4-1,d0
  662. .lp        eor.b    d0,(a0)+
  663.         dbf    d0,.lp
  664.         move    d1,sr
  665.         rts
  666.  
  667. ;----------------------------------------
  668. ; IN:    D0 = LONG value
  669. ; OUT:    A0 = CPTR string
  670.  
  671. _LongToStr    lea    (.str),a0
  672.         ror.l    #4,d0
  673.         move.b    .list(PC,d0.w),(a0)+
  674.         clr.w    d0
  675.         rol.l    #4,d0
  676.         move.b    .list(PC,d0.w),(a0)
  677.         subq.w    #1,a0
  678.         rts
  679.         
  680. .list        dc.b    "0123456789abcdef"
  681. .str        ds.b    4
  682.     
  683. ;--------------------------------
  684.  
  685. _60000        dc.b    "60000",0
  686. _highsname    dc.b    "highs",0
  687. _resload    dc.l    0            ;address of resident loader
  688.  
  689. ;--------------------------------
  690.  
  691. _badver        subq.l    #8,a7
  692.         pea    TDREASON_WRONGVER
  693.         bra    _end
  694. _exit        pea    TDREASON_OK
  695.         bra    _exit
  696. _debug        pea    TDREASON_DEBUG
  697. _end        move.w    #DMAF_DISK,(_custom+dmacon)    ;for install
  698.         move.l    (_resload),-(a7)
  699.         addq.l    #resload_Abort,(a7)
  700.         rts
  701.  
  702. ;======================================================================
  703.  
  704.     END
  705.  
  706.